﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Data.Entity;
using Kendo.Mvc.UI;
using Kendo.Mvc.Extensions;
using QLGT_2.Models;
using System.Web.Script.Serialization;
using System.Data.OleDb;
using System.Data;
using System.Data.Entity.Validation;
using System.Text;

namespace QLGT_2.Controllers
{
    public class QLGiaoTrinhController : Controller
    {
        QLGTContext db = new QLGTContext();
        List<SelectListItem> mess = new List<SelectListItem>();
        int stt=0;
        bool KTGiaoTrinh, KTGiaoTrinh_Nam, KTGiaoTrinh_HeDT, KTGiaoTrinh_TacGia, KTNhaXuatBan, KTHeDaoTao, KTTacGia,
            KTSachBan, KTSachDat, KTSachTon;

        private void SaveChanges(DbContext context)
        {
            try
            {
                context.SaveChanges();
            }
            catch (DbEntityValidationException ex)
            {
                StringBuilder sb = new StringBuilder();

                foreach (var failure in ex.EntityValidationErrors)
                {
                    sb.AppendFormat("{0} failed validation\n", failure.Entry.Entity.GetType());
                    foreach (var error in failure.ValidationErrors)
                    {
                        sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                        sb.AppendLine();
                    }
                }

                throw new DbEntityValidationException(
                    "Entity Validation Failed - errors follow:\n" +
                    sb.ToString(), ex
                ); // Add the original exception as the innerException
            }
        }

        #region QLGiaoTrinh_Nam
        public JsonResult LayGiaoTrinh_Nam()
        {
            return Json(db.tbl_GiaoTrinh_Nams.ToList(), JsonRequestBehavior.AllowGet);
        }
        public ActionResult GiaoTrinh_Nam()
        {
            if (!CheckRole.IsRole("qlgt_gtgtn_xem", Session["VietTat"] as string[]))
                return Content("Bạn chưa <a href='/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");
            ViewBag.GiaoTrinh = db.tbl_GiaoTrinhs.ToList();
            if (!Request.IsAjaxRequest())
                return View();

            return PartialView();
        }
        public ActionResult HienThiGiaoTrinh_Nam([DataSourceRequest] DataSourceRequest request)
        {
            return Json(db.tbl_GiaoTrinh_Nams.ToDataSourceResult(request));
        }

        //[ValidateAntiForgeryToken]
        public ActionResult TaoGiaoTrinh_Nam([DataSourceRequest] DataSourceRequest request, tbl_GiaoTrinh_Nam data)
        {
            if (!CheckRole.IsRole("qlgt_gtgtn_t", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                var createdata = db.tbl_GiaoTrinh_Nams.Where(m => m.MaGiaoTrinh.ToLower() == data.MaGiaoTrinh.ToLower().Trim() && m.Nam.ToLower() == data.Nam.ToLower().Trim()).ToList().Count;
                if (createdata == 0)
                {
                    db.tbl_GiaoTrinh_Nams.Add(data);
                    db.SaveChanges();
                    // state = true;
                    ////mess = "Thêm mới thành công!";
                }
                else
                {
                    return this.Json(new DataSourceResult { Errors = "Giáo trình - năm đã tồn tại!" });
                }
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult SuaGiaoTrinh_Nam([DataSourceRequest] DataSourceRequest request, tbl_GiaoTrinh_Nam data)
        {
            if (!CheckRole.IsRole("qlgt_gtgtn_s", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                db.Entry(data).State = EntityState.Modified;
                db.SaveChanges();
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult XoaGiaoTrinh_Nam([DataSourceRequest] DataSourceRequest request, tbl_GiaoTrinh_Nam data)
        {
            if (!CheckRole.IsRole("qlgt_gtgtn_x", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null)
            {
                try
                {
                    tbl_GiaoTrinh_Nam itemdata = db.tbl_GiaoTrinh_Nams.First(item => item.MaGiaoTrinh_Nam == data.MaGiaoTrinh_Nam);
                    db.tbl_GiaoTrinh_Nams.Remove(itemdata);
                    db.SaveChanges();
                }
                catch (Exception)
                {
                    
                    return this.Json(new DataSourceResult { Errors = "Dữ liệu liên quan đến Giáo trình - năm này vẫn tồn tại!" });
                }
                
            }
            return Json(ModelState.ToDataSourceResult());
        }

        public ActionResult ImportGiaoTrinh_Nam(HttpPostedFileBase FileImport)
        {

            bool state = false;
            if (!CheckRole.IsRole("qlgt_gtgtn_xem", Session["VietTat"] as string[]))
                return Json(new { State = false, Message = "Bạn không có quyền thực hiện chức năng này!" });
            if (FileImport != null)
            {
                // thuc hien thao tac tai day
                if (FileImport.ContentLength > 0)
                {
                    string Extension = System.IO.Path.GetExtension(FileImport.FileName);
                    if (Extension == ".xls" || Extension == ".xlsx")
                    {
                        string path = string.Concat(Server.MapPath("~/Uploads/File/" + DateTime.Now.ToString("MMddyyyyHHmmssfff") + FileImport.FileName));
                        //if (System.IO.File.Exists(path))
                        //{

                        //    System.IO.File.Delete(path);
                        //}
                        FileImport.SaveAs(path);
                        OleDbConnection oledbcon = new OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=" + path + ";extended properties=excel 12.0;");
                        oledbcon.Open();
                        DataTable ExcelSheets = oledbcon.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
                        string SpreadSheetName = ExcelSheets.Rows[0]["TABLE_NAME"].ToString();
                        OleDbCommand oledbcmd = new OleDbCommand("Select * from [" + SpreadSheetName + "]", oledbcon);
                        OleDbDataAdapter oledbda = new OleDbDataAdapter(oledbcmd);

                        DataTable dt = new DataTable();
                        tbl_GiaoTrinh_Nam item;
                        var dsGiaoTrinh = db.tbl_GiaoTrinhs;
                        var GiaoTrinh_Nam = db.tbl_GiaoTrinh_Nams;
                        oledbda.Fill(dt);

                        if (dt.Rows.Count > 0)
                        {
                            if (!dt.Columns.Contains("Mã Giáo trình"))
                            {
                                mess.Add(new SelectListItem { Text ="Cột Mã Giáo trình không tồn tại!"});
                                goto next;
                            }
                            if (!dt.Columns.Contains("Năm"))
                            {
                                mess.Add(new SelectListItem { Text ="Cột Năm không tồn tại!"});
                                goto next;
                            }
                            if (!dt.Columns.Contains("Giá niêm yết"))
                            {
                                mess.Add(new SelectListItem { Text ="Cột Giá niêm yết không tồn tại!"});
                                goto next;
                            }
                            for (int i = 0; i < dt.Rows.Count - 1; i++)
                            {
                                //kiem tra khoa ngoai
                                foreach (var ma in dsGiaoTrinh)
                                {
                                    KTGiaoTrinh = false;
                                    if (ma.MaGiaoTrinh.ToString().ToLower().Trim() == dt.Rows[i]["Mã Giáo trình"].ToString())
                                    {
                                        KTGiaoTrinh = true;
                                        break;
                                    }
                                }
                                if (!KTGiaoTrinh)
                                {
                                    mess.Add(new SelectListItem { Text = "Giáo trình " + dt.Rows[i]["Mã Giáo trình"].ToString() +" không tồn tại!"});
                                }

                                //kiem tra ton tai
                                foreach (var a in GiaoTrinh_Nam)
                                {
                                    KTGiaoTrinh_Nam = false;
                                    if (a.MaGiaoTrinh.ToString().ToLower().Trim() == dt.Rows[i]["Mã Giáo trình"].ToString() &&
                                        a.Nam == dt.Rows[i]["Năm"].ToString().ToLower().Trim())
                                    {
                                        KTGiaoTrinh_Nam = true;
                                        break;
                                    }
                                }
                                if (KTGiaoTrinh_Nam)
                                {
                                    mess.Add(new SelectListItem { Text = "Giáo trình " + dt.Rows[i]["Mã Giáo trình"].ToString() +" năm " +dt.Rows[i]["Năm"].ToString()+" đã tồn tại!"});
                                }
                                

                                if (!KTGiaoTrinh_Nam && KTGiaoTrinh)
                                {
                                    item = new tbl_GiaoTrinh_Nam();
                                    item.MaGiaoTrinh = dt.Rows[i]["Mã Giáo trình"].ToString().Trim();
                                    item.Nam = dt.Rows[i]["Năm"].ToString().Trim();
                                    item.GiaNiemYet = int.Parse(dt.Rows[i]["Giá niêm yết"].ToString().Trim());
                                    if (!dt.Columns.Contains("Ghi Chú"))
                                    {
                                        item.GhiChu = null;
                                    }
                                    else
                                    {
                                        item.GhiChu = dt.Rows[i]["Ghi chú"].ToString().Trim();
                                    }
                                    db.tbl_GiaoTrinh_Nams.Add(item);
                                    SaveChanges(db);
                                    stt+=1;
                                }
                            }
                        next:
                            if (mess.Count > 0)
                            {
                                state = false;
                                if (stt > 0)
                                {
                                    mess.Add(new SelectListItem { Text = "Thực hiện chèn thành công " + stt + " bản ghi!" });
                                }
                            }
                            else
                            {
                                state = true;
                                mess.Add(new SelectListItem { Text = "Thực hiện chèn thành công " + stt + " bản ghi!" });
                            }
                        }
                        else
                        {
                            Response.Write("Bạn phải nhập file định dạng excel!");
                        }
                        oledbcon.Close();
                        System.IO.File.Delete(path);
                    }

                }
            }
            else
                mess.Add(new SelectListItem { Text = "Có lỗi."});

            return Json(new { State = state, Message = mess });
        }
        #endregion

        #region QLGiaoTrinh_HeDT
        public JsonResult LayGiaoTrinh_HeDT()
        {
            return Json(db.tbl_GiaoTrinh_HeDTs.ToList(), JsonRequestBehavior.AllowGet);
        }
        public ActionResult GiaoTrinh_HeDT()
        {
            if (!CheckRole.IsRole("qlgt_gthdt_xem", Session["VietTat"] as string[]))
                return Content("Bạn chưa <a href='/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");
            ViewBag.GiaoTrinh = db.tbl_GiaoTrinhs.ToList();
            ViewBag.HeDaoTao = db.tbl_HeDaoTaos.ToList();
            if (!Request.IsAjaxRequest())
                return View();

            return PartialView();
        }
        public ActionResult HienThiGiaoTrinh_HeDT([DataSourceRequest] DataSourceRequest request)
        {
            return Json(db.tbl_GiaoTrinh_HeDTs.ToDataSourceResult(request));
        }

        //[ValidateAntiForgeryToken]
        public ActionResult TaoGiaoTrinh_HeDT([DataSourceRequest] DataSourceRequest request, tbl_GiaoTrinh_HeDT data)
        {
            if (!CheckRole.IsRole("qlgt_gthdt_t", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                var createdata = db.tbl_GiaoTrinh_HeDTs.Where(m => m.MaGiaoTrinh.ToLower() == data.MaGiaoTrinh.ToLower().Trim() && m.MaHeDaoTao == data.MaHeDaoTao).ToList().Count;
                if (createdata == 0)
                {
                    db.tbl_GiaoTrinh_HeDTs.Add(data);
                    db.SaveChanges();
                    // state = true;
                    ////mess = "Thêm mới thành công!";
                }
                else
                {
                    return this.Json(new DataSourceResult { Errors = "Giáo trình - Hệ đào tạo đã tồn tại!" });
                }
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult SuaGiaoTrinh_HeDT([DataSourceRequest] DataSourceRequest request, tbl_GiaoTrinh_HeDT data)
        {
            if (!CheckRole.IsRole("qlgt_gthdt_s", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                db.Entry(data).State = EntityState.Modified;
                db.SaveChanges();
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult XoaGiaoTrinh_HeDT([DataSourceRequest] DataSourceRequest request, tbl_GiaoTrinh_HeDT data)
        {
            if (!CheckRole.IsRole("qlgt_gthst_x", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null)
            {
                try
                {
                    tbl_GiaoTrinh_HeDT itemdata = db.tbl_GiaoTrinh_HeDTs.First(item => item.MaGT_HDT == data.MaGT_HDT);
                    db.tbl_GiaoTrinh_HeDTs.Remove(itemdata);
                    db.SaveChanges();
                }
                catch (Exception)
                {
                    
                    return this.Json(new DataSourceResult { Errors = "Dữ liệu liên quan đến Giáo trình - Hệ đào tạo này vẫn tồn tại!" });
                }
                
            }
            return Json(ModelState.ToDataSourceResult());
        }

        public ActionResult ImportGiaoTrinh_HeDT(HttpPostedFileBase FileImport)
        {

            bool state = false;
            if (!CheckRole.IsRole("qlgt_gthdt_ne", Session["VietTat"] as string[]))
                return Json(new { State = false, Message = "Bạn không có quyền thực hiện chức năng này!" });
            if (FileImport != null)
            {
                // thuc hien thao tac tai day
                if (FileImport.ContentLength > 0)
                {
                    string Extension = System.IO.Path.GetExtension(FileImport.FileName);
                    if (Extension == ".xls" || Extension == ".xlsx")
                    {
                        string path = string.Concat(Server.MapPath("~/Uploads/File/" + DateTime.Now.ToString("MMddyyyyHHmmssfff") + FileImport.FileName));
                        //if (System.IO.File.Exists(path))
                        //{

                        //    System.IO.File.Delete(path);
                        //}
                        FileImport.SaveAs(path);
                        OleDbConnection oledbcon = new OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=" + path + ";extended properties=excel 12.0;");
                        oledbcon.Open();
                        DataTable ExcelSheets = oledbcon.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
                        string SpreadSheetName = ExcelSheets.Rows[0]["TABLE_NAME"].ToString();
                        OleDbCommand oledbcmd = new OleDbCommand("Select * from [" + SpreadSheetName + "]", oledbcon);
                        OleDbDataAdapter oledbda = new OleDbDataAdapter(oledbcmd);

                        DataTable dt = new DataTable();
                        tbl_GiaoTrinh_HeDT item;
                        var dsGiaoTrinh = db.tbl_GiaoTrinhs;
                        var dsHeDaoTao = db.tbl_HeDaoTaos;
                        var GiaoTrinh_HeDT = db.tbl_GiaoTrinh_HeDTs;
                        oledbda.Fill(dt);

                        if (dt.Rows.Count > 0)
                        {
                            if (!dt.Columns.Contains("Mã Giáo trình"))
                            {
                                mess.Add(new SelectListItem { Text ="Cột Mã Giáo trình không tồn tại!"});
                                goto next;
                            }
                            if (!dt.Columns.Contains("Hệ đào tạo"))
                            {
                                mess.Add(new SelectListItem { Text ="Cột Hệ đào tạo không tồn tại!"});
                                goto next;
                            }
                            for (int i = 0; i < dt.Rows.Count - 1; i++)
                            {
                                //kiem tra khoa ngoai
                                foreach (var ma in dsGiaoTrinh)
                                {
                                    KTGiaoTrinh = false;
                                    if (ma.MaGiaoTrinh.ToString().ToLower().Trim() == dt.Rows[i]["Mã Giáo trình"].ToString())
                                    {
                                        KTGiaoTrinh = true;
                                        break;
                                    }
                                }
                                if (!KTGiaoTrinh)
                                {
                                    mess.Add(new SelectListItem { Text = "Giáo trình " + dt.Rows[i]["Mã Giáo trình"].ToString() +" không tồn tại!"});
                                }

                                //kiem tra khoa ngoai
                                foreach (var ma in dsHeDaoTao)
                                {
                                    KTHeDaoTao = false;
                                    if (ma.MaHeDaoTao.ToString().ToLower().Trim() == dt.Rows[i]["Mã Hệ đào tạo"].ToString())
                                    {
                                        KTGiaoTrinh = true;
                                        break;
                                    }
                                }
                                if (!KTHeDaoTao)
                                {
                                    mess.Add(new SelectListItem { Text = "Hệ đào tạo " + dt.Rows[i]["Mã Hệ đào tạo"].ToString() +" không tồn tại!"});
                                }

                                //kiem tra ton tai
                                foreach (var a in GiaoTrinh_HeDT)
                                {
                                    KTGiaoTrinh_HeDT = false;
                                    if (a.MaGiaoTrinh.ToString().ToLower().Trim() == dt.Rows[i]["Mã Giáo trình"].ToString() &&
                                        a.MaHeDaoTao == int.Parse(dt.Rows[i]["Mã Hệ đào tạo"].ToString()))
                                    {
                                        KTGiaoTrinh_HeDT = true;
                                        break;
                                    }
                                }
                                if (KTGiaoTrinh_HeDT)
                                {
                                    mess.Add(new SelectListItem { Text = "Giáo trình " + dt.Rows[i]["Mã Giáo trình"].ToString() +" của hệ đào tạo"+
                                                                                        dt.Rows[i]["Mã Hệ đào tạo"].ToString()+" đã tồn tại!"});
                                }

                                if (!KTGiaoTrinh_HeDT && KTGiaoTrinh &&KTHeDaoTao)
                                {
                                    item = new tbl_GiaoTrinh_HeDT();
                                    item.MaGiaoTrinh = dt.Rows[i]["Mã Giáo trình"].ToString().Trim();
                                    item.MaHeDaoTao = int.Parse(dt.Rows[i]["Mã Hệ đào tạo"].ToString().Trim());
                                    db.tbl_GiaoTrinh_HeDTs.Add(item);
                                    SaveChanges(db);
                                    stt += 1;
                                }
                            }
                        next:
                            if (mess.Count > 0)
                            {
                                state = false;
                                if (stt > 0)
                                {
                                    mess.Add(new SelectListItem { Text = "Thực hiện chèn thành công " + stt + " bản ghi!" });
                                }
                            }
                            else
                            {
                                state = true;
                                mess.Add(new SelectListItem { Text = "Thực hiện chèn thành công " + stt + " bản ghi!" });
                            }
                        }
                        else
                        {
                            Response.Write("Bạn phải nhập file định dạng excel!");
                        }
                        oledbcon.Close();
                        System.IO.File.Delete(path);
                    }

                }
            }
            else
               mess.Add(new SelectListItem { Text =  "Có lỗi."});

            return Json(new { State = state, Message = mess });
        }
        #endregion

        #region QLGiaoTrinh_TacGia
        public JsonResult LayGiaoTrinh_TacGia()
        {
            return Json(db.tbl_GiaoTrinh_TacGias.ToList(), JsonRequestBehavior.AllowGet);
        }
        public ActionResult GiaoTrinh_TacGia()
        {
            if (!CheckRole.IsRole("qlgt_gttg_xem", Session["VietTat"] as string[]))
                return Content("Bạn chưa <a href='/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");
            ViewBag.GiaoTrinh = db.tbl_GiaoTrinhs.ToList();
            ViewBag.TacGia = db.tbl_TacGias.ToList();
            if (!Request.IsAjaxRequest())
                return View();

            return PartialView();
        }
        public ActionResult HienThiGiaoTrinh_TacGia([DataSourceRequest] DataSourceRequest request)
        {
            return Json(db.tbl_GiaoTrinh_TacGias.ToDataSourceResult(request));
        }

        //[ValidateAntiForgeryToken]
        public ActionResult TaoGiaoTrinh_TacGia([DataSourceRequest] DataSourceRequest request, tbl_GiaoTrinh_TacGia data)
        {
            if (!CheckRole.IsRole("qlgt_gttg_t", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                var createdata = db.tbl_GiaoTrinh_TacGias.Where(m => m.MaGiaoTrinh.ToLower().Trim() == data.MaGiaoTrinh.ToLower().Trim() && m.MaTacGia == data.MaTacGia).ToList().Count;
                if (createdata == 0)
                {
                    db.tbl_GiaoTrinh_TacGias.Add(data);
                    db.SaveChanges();
                    // state = true;
                    ////mess = "Thêm mới thành công!";
                }
                else
                {
                    return this.Json(new DataSourceResult { Errors = "Giáo trình - tác giả đã tồn tại!" });
                }
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult SuaGiaoTrinh_TacGia([DataSourceRequest] DataSourceRequest request, tbl_GiaoTrinh_TacGia data)
        {
            if (!CheckRole.IsRole("qlgt_gttg_s", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                db.Entry(data).State = EntityState.Modified;
                db.SaveChanges();
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult XoaGiaoTrinh_TacGia([DataSourceRequest] DataSourceRequest request, tbl_GiaoTrinh_TacGia data)
        {
            if (!CheckRole.IsRole("qlgt_gttg_x", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null)
            {
                try
                {
                    tbl_GiaoTrinh_TacGia itemdata = db.tbl_GiaoTrinh_TacGias.First(item => item.MaGT_TG == data.MaGT_TG);
                    db.tbl_GiaoTrinh_TacGias.Remove(itemdata);
                    db.SaveChanges();
                }
                catch (Exception)
                {
                    
                    return this.Json(new DataSourceResult { Errors = "Dữ liệu liên quan đến Giáo trình - tác giả này vẫn tồn tại!" });
                }
                
            }
            return Json(ModelState.ToDataSourceResult());
        }

        public ActionResult ImportGiaoTrinh_TacGia(HttpPostedFileBase FileImport)
        {

            bool state = false;
            if (!CheckRole.IsRole("qlgt_gttg_ne", Session["VietTat"] as string[]))
                return Json(new { State = false, Message = "Bạn không có quyền thực hiện chức năng này!" });
            if (FileImport != null)
            {
                // thuc hien thao tac tai day
                if (FileImport.ContentLength > 0)
                {
                    string Extension = System.IO.Path.GetExtension(FileImport.FileName);
                    if (Extension == ".xls" || Extension == ".xlsx")
                    {
                        string path = string.Concat(Server.MapPath("~/Uploads/File/" + DateTime.Now.ToString("MMddyyyyHHmmssfff") + FileImport.FileName));
                        //if (System.IO.File.Exists(path))
                        //{

                        //    System.IO.File.Delete(path);
                        //}
                        FileImport.SaveAs(path);
                        OleDbConnection oledbcon = new OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=" + path + ";extended properties=excel 12.0;");
                        oledbcon.Open();
                        DataTable ExcelSheets = oledbcon.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
                        string SpreadSheetName = ExcelSheets.Rows[0]["TABLE_NAME"].ToString();
                        OleDbCommand oledbcmd = new OleDbCommand("Select * from [" + SpreadSheetName + "]", oledbcon);
                        OleDbDataAdapter oledbda = new OleDbDataAdapter(oledbcmd);

                        DataTable dt = new DataTable();
                        tbl_GiaoTrinh_TacGia item;
                        var dsGiaoTrinh = db.tbl_GiaoTrinhs;
                        var dsTacGia = db.tbl_TacGias;
                        var GiaoTrinh_TacGia = db.tbl_GiaoTrinh_TacGias;
                        oledbda.Fill(dt);

                        if (dt.Rows.Count > 0)
                        {
                            if (!dt.Columns.Contains("Mã Giáo trình"))
                            {
                                mess.Add(new SelectListItem { Text ="Cột Mã Giáo trình không tồn tại!"});
                                goto next;
                            }
                            if (!dt.Columns.Contains("Mã Tác giả"))
                            {
                                mess.Add(new SelectListItem { Text ="Cột Mã Tác giả không tồn tại!"});
                                goto next;
                            }
                            for (int i = 0; i < dt.Rows.Count - 1; i++)
                            {
                                //kiem tra khoa ngoai
                                foreach (var ma in dsGiaoTrinh)
                                {
                                    KTGiaoTrinh = false;
                                    if (ma.MaGiaoTrinh.ToString().ToLower().Trim() == dt.Rows[i]["Mã Giáo trình"].ToString())
                                    {
                                        KTGiaoTrinh = true;
                                        break;
                                    }
                                }
                                if (!KTGiaoTrinh)
                                {
                                    mess.Add(new SelectListItem { Text = "Giáo trình " + dt.Rows[i]["Mã Giáo trình"].ToString() +" không tồn tại!"});
                                }

                                //kiem tra khoa ngoai
                                foreach (var ma in dsTacGia)
                                {
                                    KTTacGia = false;
                                    if (ma.MaTacGia.ToString().ToLower().Trim() == dt.Rows[i]["Mã Tác giả"].ToString())
                                    {
                                        KTGiaoTrinh = true;
                                        break;
                                    }
                                }
                                if (!KTTacGia)
                                {
                                    mess.Add(new SelectListItem { Text = "Tác giả " + dt.Rows[i]["Mã Tác giả"].ToString() +" không tồn tại!"});
                                }

                                //kiem tra ton tai
                                foreach (var a in GiaoTrinh_TacGia)
                                {
                                    KTGiaoTrinh_TacGia = false;
                                    if (a.MaGiaoTrinh.ToString().ToLower().Trim() == dt.Rows[i]["Mã Giáo trình"].ToString() &&
                                        a.MaTacGia == int.Parse(dt.Rows[i]["Mã Tác giả"].ToString()))
                                    {
                                        KTGiaoTrinh_TacGia = true;
                                        break;
                                    }
                                }
                                if (KTGiaoTrinh_TacGia)
                                {
                                    mess.Add(new SelectListItem { Text = "Giáo trình " + dt.Rows[i]["Mã Giáo trình"].ToString() +
                                                                        " của tác giả " + dt.Rows[i]["Mã Tác giả"].ToString() +" đã tồn tại!"});
                                }

                                if (!KTGiaoTrinh_TacGia && KTGiaoTrinh && KTTacGia)
                                {
                                    item = new tbl_GiaoTrinh_TacGia();
                                    item.MaGiaoTrinh = dt.Rows[i]["Mã Giáo trình"].ToString().Trim();
                                    item.MaTacGia = int.Parse(dt.Rows[i]["Mã Tác giả"].ToString().Trim());
                                    if (!dt.Columns.Contains("Ghi Chú"))
                                    {
                                        item.GhiChu = null;
                                    }
                                    else
                                    {
                                        item.GhiChu = dt.Rows[i]["Ghi chú"].ToString().Trim();
                                    }
                                    db.tbl_GiaoTrinh_TacGias.Add(item);
                                    SaveChanges(db);
                                    stt += 1;
                                }
                            }
                        next:
                           if (mess.Count > 0)
                            {
                                state = false;
                                if (stt > 0)
                                {
                                    mess.Add(new SelectListItem { Text = "Thực hiện chèn thành công " + stt + " bản ghi!" });
                                }
                            }
                            else
                            {
                                state = true;
                                mess.Add(new SelectListItem { Text = "Thực hiện chèn thành công " + stt + " bản ghi!" });
                            }
                        }
                        else
                        {
                            Response.Write("Bạn phải nhập file định dạng excel!");
                        }
                        oledbcon.Close();
                        System.IO.File.Delete(path);
                    }

                }
            }
            else
                mess.Add(new SelectListItem { Text ="Có lỗi."});

            return Json(new { State = state, Message = mess });
        }
        #endregion

        #region QLGiaoTrinh
        public JsonResult LayGiaoTrinh()
        {
            return Json(db.tbl_GiaoTrinhs.ToList(), JsonRequestBehavior.AllowGet);
        }
        public ActionResult GiaoTrinh()
        {
            if (!CheckRole.IsRole("qlgt_gt_xem", Session["VietTat"] as string[]))
                return Content("Bạn chưa <a href='/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");
            ViewBag.NhaXuatBan = db.tbl_NhaXuatBans.ToList();
            if (!Request.IsAjaxRequest())
                return View();

            return PartialView();
        }
        public ActionResult HienThiGiaoTrinh([DataSourceRequest] DataSourceRequest request)
        {
            return Json(db.tbl_GiaoTrinhs.ToDataSourceResult(request));
        }

        //[ValidateAntiForgeryToken]
        public ActionResult TaoGiaoTrinh([DataSourceRequest] DataSourceRequest request, tbl_GiaoTrinh data)
        {
            if (!CheckRole.IsRole("qlgt_gt_t", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                var createdata = db.tbl_GiaoTrinhs.Where(m => m.MaGiaoTrinh.ToLower() == data.MaGiaoTrinh.ToLower().Trim()).ToList().Count;
                if (createdata == 0)
                {
                    db.tbl_GiaoTrinhs.Add(data);
                    db.SaveChanges();
                    // state = true;
                    ////mess = "Thêm mới thành công!";
                }
                else
                {
                    return this.Json(new DataSourceResult { Errors = "Giáo trình đã tồn tại!" });
                }
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult SuaGiaoTrinh([DataSourceRequest] DataSourceRequest request, tbl_GiaoTrinh data)
        {
            if (!CheckRole.IsRole("qlgt_gt_s", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                db.Entry(data).State = EntityState.Modified;
                db.SaveChanges();
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult XoaGiaoTrinh([DataSourceRequest] DataSourceRequest request, tbl_GiaoTrinh data)
        {
            if (!CheckRole.IsRole("qlgt_gt_x", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null)
            {
                try
                {
                    tbl_GiaoTrinh itemdata = db.tbl_GiaoTrinhs.First(item => item.MaGiaoTrinh == data.MaGiaoTrinh);
                    db.tbl_GiaoTrinhs.Remove(itemdata);
                    db.SaveChanges();
                }
                catch (Exception)
                {
                    return this.Json(new DataSourceResult { Errors = "Dữ liệu liên quan đến Giáo trình này vẫn tồn tại!" });
                }
                
            }
            return Json(ModelState.ToDataSourceResult());
        }

        public ActionResult ImportGiaoTrinh(HttpPostedFileBase FileImport)
        {

            bool state = false;
            if (!CheckRole.IsRole("qlgt_gt_ne", Session["VietTat"] as string[]))
                return Json(new { State = false, Message = "Bạn không có quyền thực hiện chức năng này!" });
            if (FileImport != null)
            {
                // thuc hien thao tac tai day
                if (FileImport.ContentLength > 0)
                {
                    string Extension = System.IO.Path.GetExtension(FileImport.FileName);
                    if (Extension == ".xls" || Extension == ".xlsx")
                    {
                        string path = string.Concat(Server.MapPath("~/Uploads/File/" + DateTime.Now.ToString("MMddyyyyHHmmssfff") + FileImport.FileName));
                        //if (System.IO.File.Exists(path))
                        //{

                        //    System.IO.File.Delete(path);
                        //}
                        FileImport.SaveAs(path);
                        OleDbConnection oledbcon = new OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=" + path + ";extended properties=excel 12.0;");
                        oledbcon.Open();
                        DataTable ExcelSheets = oledbcon.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
                        string SpreadSheetName = ExcelSheets.Rows[0]["TABLE_NAME"].ToString();
                        OleDbCommand oledbcmd = new OleDbCommand("Select * from [" + SpreadSheetName + "]", oledbcon);
                        OleDbDataAdapter oledbda = new OleDbDataAdapter(oledbcmd);

                        DataTable dt = new DataTable();
                        tbl_GiaoTrinh item;
                        var dsNhaXuatBan = db.tbl_NhaXuatBans;
                        var GiaoTrinh = db.tbl_GiaoTrinhs;
                        oledbda.Fill(dt);

                        if (dt.Rows.Count > 0)
                        {
                            if (!dt.Columns.Contains("Mã Giáo trình"))
                            {
                                mess.Add(new SelectListItem { Text ="Cột Mã Giáo trình không tồn tại!"});
                                goto next;
                            }
                            if (!dt.Columns.Contains("Tên Giáo trình"))
                            {
                                mess.Add(new SelectListItem { Text ="Cột Tên Tác giả không tồn tại!"});
                                goto next;
                            }
                            if (!dt.Columns.Contains("Hiệu đính"))
                            {
                                mess.Add(new SelectListItem { Text ="Cột Hiệu đính không tồn tại!"});
                                goto next;
                            }
                            if (!dt.Columns.Contains("Số chương"))
                            {
                                mess.Add(new SelectListItem { Text ="Cột Số chương không tồn tại!"});
                                goto next;
                            }
                            if (!dt.Columns.Contains("Số trang"))
                            {
                                mess.Add(new SelectListItem { Text ="Cột Số trang không tồn tại!"});
                                goto next;
                            }
                            if (!dt.Columns.Contains("Tên Nhà xuất bản"))
                            {
                                mess.Add(new SelectListItem { Text ="Cột Tên Nhà xuất bản không tồn tại!"});
                                goto next;
                            }
                            for (int i = 0; i < dt.Rows.Count - 1; i++)
                            {
                                //kiem tra khoa ngoai
                                foreach (var ma in dsNhaXuatBan)
                                {
                                    KTNhaXuatBan = false;
                                    if (ma.MaNXB.ToString().ToLower().Trim() == dt.Rows[i]["Mã Nhà xuất bản"].ToString())
                                    {
                                        KTGiaoTrinh = true;
                                        break;
                                    }
                                }
                                if (!KTNhaXuatBan)
                                {
                                    mess.Add(new SelectListItem { Text = "Nhà xuất bản " + dt.Rows[i]["Mã Nhà xuất bản"].ToString() +" không tồn tại!"});
                                }

                                //kiem tra ton tai
                                foreach (var a in GiaoTrinh)
                                {
                                    KTGiaoTrinh = false;
                                    if (a.MaGiaoTrinh.ToString().ToLower().Trim() == dt.Rows[i]["Mã Giáo trình"].ToString())
                                    {
                                        KTGiaoTrinh = true;
                                        break;
                                    }
                                }
                                if (KTGiaoTrinh)
                                {
                                    mess.Add(new SelectListItem { Text = "Giáo trình " + dt.Rows[i]["Mã Giáo trình"].ToString() +" đã tồn tại!"});
                                }

                                if (!KTGiaoTrinh && KTNhaXuatBan)
                                {
                                    item = new tbl_GiaoTrinh();
                                    item.MaGiaoTrinh = dt.Rows[i]["Mã Giáo trình"].ToString().Trim();
                                    item.TenGiaoTrinh = dt.Rows[i]["Tên Giáo trình"].ToString().Trim();
                                    item.HieuDinh = DateTime.Parse(dt.Rows[i]["Hiệu Đính"].ToString().Trim());
                                    item.SoTrang = int.Parse(dt.Rows[i]["Số trang"].ToString().Trim());
                                    item.SoChuong = int.Parse(dt.Rows[i]["Số chương"].ToString().Trim());
                                    item.MaNXB = int.Parse(dt.Rows[i]["Mã Nhà xuất bản"].ToString().Trim());
                                    db.tbl_GiaoTrinhs.Add(item);
                                    SaveChanges(db);
                                    stt+=1;
                                }
                            }
                        next:
                            if (mess.Count > 0)
                            {
                                state = false;
                                if (stt > 0)
                                {
                                    mess.Add(new SelectListItem { Text = "Thực hiện chèn thành công " + stt + " bản ghi!" });
                                }
                            }
                            else
                            {
                                state = true;
                                mess.Add(new SelectListItem { Text = "Thực hiện chèn thành công " + stt + " bản ghi!" });
                            }
                        }
                        else
                        {
                            Response.Write("Bạn phải nhập file định dạng excel!");
                        }
                        oledbcon.Close();
                        System.IO.File.Delete(path);
                    }

                }
            }
            else
                mess.Add(new SelectListItem { Text = "Có lỗi."});

            return Json(new { State = state, Message = mess });
        }
        #endregion

        #region QLSachBan
        public JsonResult LaySachBan()
        {
            return Json(db.tbl_SachBans.ToList(), JsonRequestBehavior.AllowGet);
        }
        public ActionResult SachBan()
        {
            if (!CheckRole.IsRole("qlgt_sb_xem", Session["VietTat"] as string[]))
                return Content("Bạn chưa <a href='/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");
            ViewBag.GiaoTrinh = db.tbl_GiaoTrinhs.ToList();
            ViewBag.Khoa = db.tbl_Khoas.ToList();
            if (!Request.IsAjaxRequest())
                return View();

            return PartialView();
        }
        public ActionResult HienThiSachBan([DataSourceRequest] DataSourceRequest request)
        {
            return Json(db.tbl_SachBans.ToDataSourceResult(request));
        }

        //[ValidateAntiForgeryToken]
        public ActionResult TaoSachBan([DataSourceRequest] DataSourceRequest request, tbl_SachBan data)
        {
            if (!CheckRole.IsRole("qlgt_sb_t", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                var createdata = db.tbl_SachBans.Where(m => m.MaSachBan == data.MaSachBan && m.SoLuong == data.SoLuong && m.NgayBan == m.NgayBan
                                                        && (m.MaKhoa == data.MaKhoa || m.SinhVien == data.SinhVien)).ToList().Count;
                if (createdata == 0)
                {
                    db.tbl_SachBans.Add(data);
                    db.SaveChanges();
                    // state = true;
                    ////mess = "Thêm mới thành công!";
                }
                else
                {
                    return this.Json(new DataSourceResult { Errors = "Sách bán đã tồn tại!" });
                }
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult SuaSachBan([DataSourceRequest] DataSourceRequest request, tbl_SachBan data)
        {
            if (!CheckRole.IsRole("qlgt_sb_s", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                db.Entry(data).State = EntityState.Modified;
                db.SaveChanges();
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult XoaSachBan([DataSourceRequest] DataSourceRequest request, tbl_SachBan data)
        {
            if (!CheckRole.IsRole("qlgt_sb_x", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null)
            {
                try
                {
                    tbl_SachBan itemdata = db.tbl_SachBans.First(item => item.MaSachBan == data.MaSachBan);
                    db.tbl_SachBans.Remove(itemdata);
                    db.SaveChanges();
                }
                catch (Exception)
                {
                    return this.Json(new DataSourceResult { Errors = "Dữ liệu liên quan đến Sách bán này vẫn tồn tại!" });
                }
                
            }
            return Json(ModelState.ToDataSourceResult());
        }

        public ActionResult ImportSachBan(HttpPostedFileBase FileImport)
        {

            bool state = false;
            if (!CheckRole.IsRole("qlgt_sb_ne", Session["VietTat"] as string[]))
                return Json(new { State = false, Message = "Bạn không có quyền thực hiện chức năng này!" });
            if (FileImport != null)
            {
                // thuc hien thao tac tai day
                if (FileImport.ContentLength > 0)
                {
                    string Extension = System.IO.Path.GetExtension(FileImport.FileName);
                    if (Extension == ".xls" || Extension == ".xlsx")
                    {
                        string path = string.Concat(Server.MapPath("~/Uploads/File/" + DateTime.Now.ToString("MMddyyyyHHmmssfff") + FileImport.FileName));
                        //if (System.IO.File.Exists(path))
                        //{

                        //    System.IO.File.Delete(path);
                        //}
                        FileImport.SaveAs(path);
                        OleDbConnection oledbcon = new OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=" + path + ";extended properties=excel 12.0;");
                        oledbcon.Open();
                        DataTable ExcelSheets = oledbcon.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
                        string SpreadSheetName = ExcelSheets.Rows[0]["TABLE_NAME"].ToString();
                        OleDbCommand oledbcmd = new OleDbCommand("Select * from [" + SpreadSheetName + "]", oledbcon);
                        OleDbDataAdapter oledbda = new OleDbDataAdapter(oledbcmd);

                        DataTable dt = new DataTable();
                        tbl_SachBan item;
                        var dsGiaoTrinh = db.tbl_GiaoTrinhs;
                        var SachBan = db.tbl_SachBans;
                        oledbda.Fill(dt);

                        if (dt.Rows.Count > 0)
                        {
                            if (!dt.Columns.Contains("Mã Giáo trình"))
                            {
                                mess.Add(new SelectListItem { Text ="Cột Mã Giáo trình không tồn tại!"});
                                goto next;
                            }
                            if (!dt.Columns.Contains("Số lượng"))
                            {
                                mess.Add(new SelectListItem { Text ="Cột Số lượng không tồn tại!"});
                                goto next;
                            }
                            if (!dt.Columns.Contains("Ngày bán"))
                            {
                                mess.Add(new SelectListItem { Text ="Cột Ngày bán không tồn tại!"});
                                goto next;
                            }
                            for (int i = 0; i < dt.Rows.Count - 1; i++)
                            {
                                //kiem tra khoa ngoai
                                foreach (var ma in dsGiaoTrinh)
                                {
                                    KTGiaoTrinh = false;
                                    if (ma.MaGiaoTrinh.ToString().ToLower().Trim() == dt.Rows[i]["Mã Giáo trình"].ToString())
                                    {
                                        KTGiaoTrinh = true;
                                        break;
                                    }
                                }
                                if (!KTGiaoTrinh)
                                {
                                    mess.Add(new SelectListItem { Text = "Giáo trình " + dt.Rows[i]["Mã Giáo trình"].ToString() +" không tồn tại!"});
                                }

                                //kiem tra ton tai
                                foreach (var a in SachBan)
                                {
                                    KTSachBan = false;
                                    if (a.MaGiaoTrinh.ToString().ToLower().Trim() == dt.Rows[i]["Mã Giáo trình"].ToString() &&
                                        a.SoLuong.ToString().ToLower().Trim() == dt.Rows[i]["Số lượng"].ToString() &&
                                        a.NgayBan.ToString().ToLower().Trim() == dt.Rows[i]["Ngày bán"].ToString() ||
                                        a.MaKhoa.ToString().ToLower().Trim() == dt.Rows[i]["Mã Khoa"].ToString() ||
                                        a.SinhVien.ToString().ToLower().Trim() == dt.Rows[i]["Sinh viên"].ToString())
                                    {
                                        KTSachBan = true;
                                        break;
                                    }
                                }
                                if (KTSachBan)
                                {
                                    mess.Add(new SelectListItem { Text = "Sách bán: " + dt.Rows[i]["Mã Giáo trình"].ToString() +
                                                                            ", ngày " + dt.Rows[i]["Ngày bán"].ToString() +
                                                                            ", số lượng " + dt.Rows[i]["Số lượng"].ToString() +" đã tồn tại!"});
                                }

                                if (!KTSachBan && KTGiaoTrinh)
                                {
                                    item = new tbl_SachBan();
                                    item.MaGiaoTrinh = dt.Rows[i]["Mã Giáo trình"].ToString().Trim();
                                    item.SoLuong = int.Parse(dt.Rows[i]["Số lượng"].ToString().Trim());
                                    item.NgayBan = DateTime.Parse(dt.Rows[i]["Ngày bán"].ToString().Trim());
                                    item.MaKhoa = dt.Rows[i]["Mã Khoa"].ToString().Trim();
                                    item.SinhVien = int.Parse(dt.Rows[i]["Sinh viên"].ToString().Trim());
                                    db.tbl_SachBans.Add(item);
                                    SaveChanges(db);
                                    stt+=1;
                                }
                            }
                        next:
                            if (mess.Count > 0)
                            {
                                state = false;
                                if (stt > 0)
                                {
                                    mess.Add(new SelectListItem { Text = "Thực hiện chèn thành công " + stt + " bản ghi!" });
                                }
                            }
                            else
                            {
                                state = true;
                                mess.Add(new SelectListItem { Text = "Thực hiện chèn thành công " + stt + " bản ghi!" });
                            }
                        }
                        else
                        {
                            Response.Write("Bạn phải nhập file định dạng excel!");
                        }
                        oledbcon.Close();
                        System.IO.File.Delete(path);
                    }

                }
            }
            else
               mess.Add(new SelectListItem { Text =  "Có lỗi."});

            return Json(new { State = state, Message = mess });
        }
        #endregion

        #region QLSachDat
        public JsonResult LaySachDat()
        {
            return Json(db.tbl_SachDats.ToList(), JsonRequestBehavior.AllowGet);
        }
        public ActionResult SachDat()
        {
            if (!CheckRole.IsRole("qlgt_sd_xem", Session["VietTat"] as string[]))
                return Content("Bạn chưa <a href='/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");
            ViewBag.GiaoTrinh = db.tbl_GiaoTrinhs.ToList();
            ViewBag.NhaXuatBan = db.tbl_NhaXuatBans.ToList();
            if (!Request.IsAjaxRequest())
                return View();

            return PartialView();
        }
        public ActionResult HienThiSachDat([DataSourceRequest] DataSourceRequest request)
        {
            return Json(db.tbl_SachDats.ToDataSourceResult(request));
        }

        //[ValidateAntiForgeryToken]
        public ActionResult TaoSachDat([DataSourceRequest] DataSourceRequest request, tbl_SachDat data)
        {
            if (!CheckRole.IsRole("qlgt_sd_t", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                var createdata = db.tbl_SachDats.Where(m => m.MaSachDat == data.MaSachDat && m.SoLuong == data.SoLuong && m.NgayDat == m.NgayDat
                                                        && m.MaNXB == data.MaNXB).ToList().Count;
                if (createdata == 0)
                {
                    db.tbl_SachDats.Add(data);
                    db.SaveChanges();
                    // state = true;
                    ////mess = "Thêm mới thành công!";
                }
                else
                {
                    return this.Json(new DataSourceResult { Errors = "Sách đặt đã tồn tại!" });
                }
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult SuaSachDat([DataSourceRequest] DataSourceRequest request, tbl_SachDat data)
        {
            if (!CheckRole.IsRole("qlgt_sd_s", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                db.Entry(data).State = EntityState.Modified;
                db.SaveChanges();
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult XoaSachDat([DataSourceRequest] DataSourceRequest request, tbl_SachDat data)
        {
            if (!CheckRole.IsRole("qlgt_sd_x", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null)
            {
                try
                {
                    tbl_SachDat itemdata = db.tbl_SachDats.First(item => item.MaSachDat == data.MaSachDat);
                    db.tbl_SachDats.Remove(itemdata);
                    db.SaveChanges();
                }
                catch (Exception)
                {
                    return this.Json(new DataSourceResult { Errors = "Dữ liệu liên quan đến Sách đặt này vẫn tồn tại!" });
                }
                
            }
            return Json(ModelState.ToDataSourceResult());
        }

        public ActionResult ImportSachDat(HttpPostedFileBase FileImport)
        {

            bool state = false;
            if (!CheckRole.IsRole("qlgt_sd_ne", Session["VietTat"] as string[]))
                return Json(new { State = false, Message = "Bạn không có quyền thực hiện chức năng này!" });
            if (FileImport != null)
            {
                // thuc hien thao tac tai day
                if (FileImport.ContentLength > 0)
                {
                    string Extension = System.IO.Path.GetExtension(FileImport.FileName);
                    if (Extension == ".xls" || Extension == ".xlsx")
                    {
                        string path = string.Concat(Server.MapPath("~/Uploads/File/" + DateTime.Now.ToString("MMddyyyyHHmmssfff") + FileImport.FileName));
                        //if (System.IO.File.Exists(path))
                        //{

                        //    System.IO.File.Delete(path);
                        //}
                        FileImport.SaveAs(path);
                        OleDbConnection oledbcon = new OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=" + path + ";extended properties=excel 12.0;");
                        oledbcon.Open();
                        DataTable ExcelSheets = oledbcon.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
                        string SpreadSheetName = ExcelSheets.Rows[0]["TABLE_NAME"].ToString();
                        OleDbCommand oledbcmd = new OleDbCommand("Select * from [" + SpreadSheetName + "]", oledbcon);
                        OleDbDataAdapter oledbda = new OleDbDataAdapter(oledbcmd);

                        DataTable dt = new DataTable();
                        tbl_SachDat item;
                        var dsNXB = db.tbl_NhaXuatBans;
                        var SachDat = db.tbl_SachDats;
                        oledbda.Fill(dt);

                        if (dt.Rows.Count > 0)
                        {
                            if (!dt.Columns.Contains("Mã Giáo trình"))
                            {
                                mess.Add(new SelectListItem { Text ="Cột Mã Giáo trình không tồn tại!"});
                                goto next;
                            }
                            if (!dt.Columns.Contains("Số lượng"))
                            {
                                mess.Add(new SelectListItem { Text ="Cột Số lượng không tồn tại!"});
                                goto next;
                            }
                            if (!dt.Columns.Contains("Ngày đặt"))
                            {
                                mess.Add(new SelectListItem { Text ="Cột Ngày đặt không tồn tại!"});
                                goto next;
                            }
                            if (!dt.Columns.Contains("Mã nhà xuất bản"))
                            {
                                mess.Add(new SelectListItem { Text ="Cột Mã nhà xuất bản không tồn tại!"});
                                goto next;
                            }
                            for (int i = 0; i < dt.Rows.Count - 1; i++)
                            {
                                //kiem tra khoa ngoai
                                foreach (var ma in dsNXB)
                                {
                                    KTNhaXuatBan = false;
                                    if (ma.MaNXB.ToString().ToLower().Trim() == dt.Rows[i]["Mã Nhà xuất bản"].ToString())
                                    {
                                        KTNhaXuatBan = true;
                                        break;
                                    }
                                }
                                if (!KTNhaXuatBan)
                                {
                                    mess.Add(new SelectListItem { Text = "Nhà xuất bản " + dt.Rows[i]["Mã Nhà xuất bản"].ToString() +" không tồn tại!"});
                                }

                                //kiem tra ton tai
                                foreach (var a in SachDat)
                                {
                                    KTSachDat = false;
                                    if (a.MaGiaoTrinh.ToString().ToLower().Trim() == dt.Rows[i]["Mã Giáo trình"].ToString() &&
                                        a.SoLuong.ToString().ToLower().Trim() == dt.Rows[i]["Số lượng"].ToString() &&
                                        a.NgayDat.ToString().ToLower().Trim() == dt.Rows[i]["Ngày đặt"].ToString() &&
                                        a.MaNXB.ToString().ToLower().Trim() == dt.Rows[i]["Mã Nhà xuất bản"].ToString())
                                    {
                                        KTSachDat = true;
                                        break;
                                    }
                                }
                                if (KTSachDat)
                                {
                                    mess.Add(new SelectListItem { Text = "Sách đặt: " + dt.Rows[i]["Mã Giáo trình"].ToString() +
                                                                            ", ngày " + dt.Rows[i]["Ngày đặt"].ToString() +
                                                                            ", số lượng " + dt.Rows[i]["Số lượng"].ToString() +" đã tồn tại!"});
                                }

                                if (!KTSachDat && KTNhaXuatBan)
                                {
                                    item = new tbl_SachDat();
                                    item.MaGiaoTrinh = dt.Rows[i]["Mã Giáo trình"].ToString().Trim();
                                    item.SoLuong = int.Parse(dt.Rows[i]["Số lượng"].ToString().Trim());
                                    item.NgayDat = DateTime.Parse(dt.Rows[i]["Ngày đặt"].ToString().Trim());
                                    item.MaNXB = int.Parse(dt.Rows[i]["Mã Nhà xuất bản"].ToString().Trim());
                                    if (!dt.Columns.Contains("Ghi Chú"))
                                    {
                                        item.GhiChu = null;
                                    }
                                    else
                                    {
                                        item.GhiChu = dt.Rows[i]["Ghi chú"].ToString().Trim();
                                    }
                                    db.tbl_SachDats.Add(item);
                                    SaveChanges(db);
                                    stt += 1;
                                }
                            }
                        next:
                            if (mess.Count > 0)
                            {
                                state = false;
                                if (stt > 0)
                                {
                                    mess.Add(new SelectListItem { Text = "Thực hiện chèn thành công " + stt + " bản ghi!" });
                                }
                            }
                            else
                            {
                                state = true;
                                mess.Add(new SelectListItem { Text = "Thực hiện chèn thành công " + stt + " bản ghi!" });
                            }
                        }
                        else
                        {
                            Response.Write("Bạn phải nhập file định dạng excel!");
                        }
                        oledbcon.Close();
                        System.IO.File.Delete(path);
                    }

                }
            }
            else
                mess.Add(new SelectListItem { Text = "Có lỗi."});

            return Json(new { State = state, Message = mess });
        }
        #endregion


        #region QLSachTon
        public JsonResult LaySachTon()
        {
            return Json(db.tbl_SachTons.ToList(), JsonRequestBehavior.AllowGet);
        }
        public ActionResult SachTon()
        {
            if (!CheckRole.IsRole("qlgt_st_xem", Session["VietTat"] as string[]))
                return Content("Bạn chưa <a href='/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");
            ViewBag.GiaoTrinh = db.tbl_GiaoTrinhs.ToList();
            ViewBag.Khoa = db.tbl_Khoas.ToList();
            if (!Request.IsAjaxRequest())
                return View();

            return PartialView();
        }
        public ActionResult HienThiSachTon([DataSourceRequest] DataSourceRequest request)
        {
            return Json(db.tbl_SachTons.ToDataSourceResult(request));
        }

        //[ValidateAntiForgeryToken]
        public ActionResult TaoSachTon([DataSourceRequest] DataSourceRequest request, tbl_SachTon data)
        {
            if (!CheckRole.IsRole("qlgt_st_t", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                var createdata = db.tbl_SachTons.Where(m => m.MaSachTon == data.MaSachTon && m.Nam == m.Nam).ToList().Count;
                if (createdata == 0)
                {
                    db.tbl_SachTons.Add(data);
                    db.SaveChanges();
                }
                else
                {
                    return this.Json(new DataSourceResult { Errors = "Sách tồn đã tồn tại!" });
                }
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult SuaSachTon([DataSourceRequest] DataSourceRequest request, tbl_SachTon data)
        {
            if (!CheckRole.IsRole("qlgt_st_s", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                db.Entry(data).State = EntityState.Modified;
                db.SaveChanges();
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult XoaSachTon([DataSourceRequest] DataSourceRequest request, tbl_SachTon data)
        {
            if (!CheckRole.IsRole("qlgt_st_x", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null)
            {
                try
                {
                    tbl_SachTon itemdata = db.tbl_SachTons.First(item => item.MaSachTon == data.MaSachTon);
                    db.tbl_SachTons.Remove(itemdata);
                    db.SaveChanges();
                }
                catch (Exception)
                {
                    return this.Json(new DataSourceResult { Errors = "Dữ liệu liên quan đến Sách tồn này vẫn tồn tại!" });
                }
                
            }
            return Json(ModelState.ToDataSourceResult());
        }

        public ActionResult ImportSachTon(HttpPostedFileBase FileImport)
        {

            bool state = false;
            if (!CheckRole.IsRole("qlgt_st_ne", Session["VietTat"] as string[]))
                return Json(new { State = false, Message = "Bạn không có quyền thực hiện chức năng này!" });
            if (FileImport != null)
            {
                // thuc hien thao tac tai day
                if (FileImport.ContentLength > 0)
                {
                    string Extension = System.IO.Path.GetExtension(FileImport.FileName);
                    if (Extension == ".xls" || Extension == ".xlsx")
                    {
                        string path = string.Concat(Server.MapPath("~/Uploads/File/" + DateTime.Now.ToString("MMddyyyyHHmmssfff") + FileImport.FileName));
                        //if (System.IO.File.Exists(path))
                        //{

                        //    System.IO.File.Delete(path);
                        //}
                        FileImport.SaveAs(path);
                        OleDbConnection oledbcon = new OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=" + path + ";extended properties=excel 12.0;");
                        oledbcon.Open();
                        DataTable ExcelSheets = oledbcon.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
                        string SpreadSheetName = ExcelSheets.Rows[0]["TABLE_NAME"].ToString();
                        OleDbCommand oledbcmd = new OleDbCommand("Select * from [" + SpreadSheetName + "]", oledbcon);
                        OleDbDataAdapter oledbda = new OleDbDataAdapter(oledbcmd);

                        DataTable dt = new DataTable();
                        tbl_SachTon item;
                        var dsGiaoTrinh = db.tbl_GiaoTrinhs;
                        var SachTon = db.tbl_SachTons;
                        oledbda.Fill(dt);

                        if (dt.Rows.Count > 0)
                        {
                            if (!dt.Columns.Contains("Mã Giáo trình"))
                            {
                                mess.Add(new SelectListItem { Text = "Cột Mã Giáo trình không tồn tại!" });
                                goto next;
                            }
                            if (!dt.Columns.Contains("Năm"))
                            {
                                mess.Add(new SelectListItem { Text = "Cột Năm không tồn tại!" });
                                goto next;
                            }
                            if (!dt.Columns.Contains("Số lượng"))
                            {
                                mess.Add(new SelectListItem { Text = "Cột Số lượng không tồn tại!" });
                                goto next;
                            }
                            for (int i = 0; i < dt.Rows.Count - 1; i++)
                            {
                                //kiem tra khoa ngoai
                                foreach (var ma in dsGiaoTrinh)
                                {
                                    KTGiaoTrinh = false;
                                    if (ma.MaGiaoTrinh.ToString().ToLower().Trim() == dt.Rows[i]["Mã Giáo trình"].ToString())
                                    {
                                        KTGiaoTrinh = true;
                                        break;
                                    }
                                }
                                if (!KTGiaoTrinh)
                                {
                                    mess.Add(new SelectListItem { Text = "Giáo trình " + dt.Rows[i]["Mã Giáo trình"].ToString() + " không tồn tại!" });
                                }

                                //kiem tra ton tai
                                foreach (var a in SachTon)
                                {
                                    KTSachTon = false;
                                    if (a.MaGiaoTrinh.ToString().ToLower().Trim() == dt.Rows[i]["Mã Giáo trình"].ToString() &&
                                        a.Nam.ToString().ToLower().Trim() == dt.Rows[i]["Năm"].ToString())
                                    {
                                        KTSachTon = true;
                                        break;
                                    }
                                }
                                if (KTSachTon)
                                {
                                    mess.Add(new SelectListItem
                                    {
                                        Text = "Sách tồn: " + dt.Rows[i]["Mã Giáo trình"].ToString() +
                                                  ", năm " + dt.Rows[i]["Năm"].ToString() +" đã tồn tại!"
                                    });
                                }

                                if (!KTSachTon && KTGiaoTrinh)
                                {
                                    item = new tbl_SachTon();
                                    item.MaGiaoTrinh = dt.Rows[i]["Mã Giáo trình"].ToString().Trim();
                                    item.SoLuong = int.Parse(dt.Rows[i]["Số lượng"].ToString().Trim());
                                    item.Nam = int.Parse(dt.Rows[i]["Năm"].ToString().Trim());
                                    if (!dt.Columns.Contains("Ghi Chú"))
                                    {
                                        item.GhiChu = null;
                                    }
                                    else
                                    {
                                        item.GhiChu = dt.Rows[i]["Ghi chú"].ToString().Trim();
                                    }
                                    db.tbl_SachTons.Add(item);
                                    SaveChanges(db);
                                    stt += 1;
                                }
                            }
                        next:
                            if (mess.Count > 0)
                            {
                                state = false;
                                if (stt > 0)
                                {
                                    mess.Add(new SelectListItem { Text = "Thực hiện chèn thành công " + stt + " bản ghi!" });
                                }
                            }
                            else
                            {
                                state = true;
                                mess.Add(new SelectListItem { Text = "Thực hiện chèn thành công " + stt + " bản ghi!" });
                            }
                        }
                        else
                        {
                            Response.Write("Bạn phải nhập file định dạng excel!");
                        }
                        oledbcon.Close();
                        System.IO.File.Delete(path);
                    }

                }
            }
            else
                mess.Add(new SelectListItem { Text = "Có lỗi." });

            return Json(new { State = state, Message = mess });
        }
        #endregion


       
    }
}